﻿using System;
using System.Runtime.Serialization;
using System.Diagnostics.CodeAnalysis;

namespace JTLeigh.Commerce.Spencer.Features.ProductFeedback.Service.Contracts.Runtime.GetProductFeedback
{

	/// <summary>
	/// Data contract representing a product review video for a single product by a single 
    /// customer.
	/// </summary>
	[DataContract(Name = "ProductReviewVideo")]
	public class ProductReviewVideo
	{

		#region Properties

        /// <summary>
        /// Gets or sets the path to the still.
        /// </summary>
        /// <remarks>
        /// <para>
        /// All paths returned from services must be relative and should be mapped to 
        /// channel-specific relative or absolute paths in each channel.
        /// </para>
        /// </remarks>
        [DataMember(Name = "StillPath", IsRequired = true)]
        public string StillPath { get; set; }

        /// <summary>
        /// Gets or sets the width of the still.
        /// </summary>
        /// <value>An <see cref="Int16"/> pixel width.</value>
        [DataMember(Name = "StillWidth", IsRequired = true)]
        public short StillWidth { get; set; }

        /// <summary>
        /// Gets or sets the height of the still.
        /// </summary>
        /// <value>An <see cref="Int16"/> pixel height.</value>
        [DataMember(Name = "StillHeight", IsRequired = true)]
        public short StillHeight { get; set; }

        /// <summary>
        /// Gets or sets the path to the video.
        /// </summary>
        /// <remarks>
        /// <para>
        /// All paths returned from services must be relative and should be mapped to 
        /// channel-specific relative or absolute paths in each channel.
        /// </para>
        /// </remarks>
        [DataMember(Name = "VideoPath", IsRequired = true)]
        public string VideoPath { get; set; }

        /// <summary>
        /// Gets or sets the width of the video.
        /// </summary>
        /// <value>An <see cref="Int16"/> pixel width.</value>
        [DataMember(Name = "VideoWidth", IsRequired = true)]
        public short VideoWidth { get; set; }

        /// <summary>
        /// Gets or sets the height of the video.
        /// </summary>
        /// <value>An <see cref="Int16"/> pixel height.</value>
        [DataMember(Name = "VideoHeight", IsRequired = true)]
        public short VideoHeight { get; set; }

        /// <summary>
        /// Gets or sets the length of the video in seconds.
        /// </summary>
        [DataMember(Name = "VideoLength", IsRequired = true)]
        public short Length { get; set; }

        /// <summary>
        /// Gets or sets the transcript of the video, or <see langword="null"/> if the video 
        /// doesn't have a transcript.
        /// </summary>
        [DataMember(Name = "Transcript", IsRequired = false)]
        public string Transcript { get; set; }

        #endregion // Properties

	}

}
